package com.xiyoo.cw.utils;

import com.github.benmanes.caffeine.cache.Cache;
import com.github.benmanes.caffeine.cache.Caffeine;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import java.util.concurrent.TimeUnit;

/**
 * @Description 缓存
 * @Author zhouzhongqing
 * @Date 2025/5/14 9:39
 * @Version 1.0
 **/
@Component
@Slf4j
public class CacheUtils {

    // 验证码缓存配置：10分钟过期，最大10000条
    private final Cache<String, String> cache = Caffeine.newBuilder()
            .expireAfterWrite(10, TimeUnit.MINUTES) // 写入后10分钟过期
            .maximumSize(10_000)                   // 防止内存溢出
            .recordStats()                         // 开启统计（可选）
            .build();


    /**
     * 保存验证码
     *
     * @param email 邮箱
     * @param code  6位验证码
     */
    public void saveCode(String email, String code) {
        log.info("保存验证码-email={}，code={}", email, code);
        cache.put(email, code);
    }

    /**
     * 验证验证码（验证后自动删除）
     *
     * @param email     邮箱
     * @param inputCode 用户输入的验证码
     * @return 是否匹配
     */
    public boolean validateCode(String email, String inputCode) {
        String savedCode = cache.getIfPresent(email);
        if (savedCode == null) {
            return false;
        }
        log.info("验证验证码-email={}，code={}", email, inputCode);

        // 无论验证成功与否都使旧验证码失效
        cache.invalidate(email);
        return savedCode.equalsIgnoreCase(inputCode);
    }

}
